package model

import (
	"context"
	"errors"

	"gorm.io/gorm"
)

type BlogTag struct {
	gorm.Model
	BlogNum   int    `gorm:"default:0"`
	TagDetail string `gorm:"not null"`
}

func (m *defaultTagModel) FindOrCreate(ctx context.Context, tagName string) (*BlogTag, error) {
	var tag BlogTag

	// 先尝试查找
	err := m.db.WithContext(ctx).Where("tag_detail = ?", tagName).First(&tag).Error
	if err == nil {
		return &tag, nil
	}

	if !errors.Is(err, gorm.ErrRecordNotFound) {
		return nil, err
	}

	// 不存在则创建
	tag = BlogTag{
		TagDetail: tagName,
		BlogNum:   1,
	}

	err = m.db.WithContext(ctx).Create(&tag).Error
	if err != nil {
		return nil, err
	}

	return &tag, nil
}

func (m *defaultTagModel) IncrementBlogNum(ctx context.Context, tagId uint) error {
	return m.db.WithContext(ctx).
		Model(&BlogTag{}).
		Where("id = ?", tagId).
		Update("blog_num", gorm.Expr("blog_num + 1")).
		Error
}
